package com.example.mybatisplusproject.entity;

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author zls
 * @date 2021/9/11 5:26 下午
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) // 序列化时，将属性名从驼峰转换为下划线
@JsonInclude(JsonInclude.Include.NON_NULL) // 反序列化时，只关心非空的属性，对于空属性，不会反序列化到对象中
public class Student {
    @JsonIgnore //标注在属性上，表示序列化/反序列化时，不关心此属性
    private Long id;
    @JsonProperty("another_name") // 序列化时，将序列化为another_name属性 ；反序列化时，将从json 中的another_name读取值
    private String name;
    private Integer age;
    private School school;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-mm-dd hh:MM:ss") // 序列化时，指定序列化为指定格式的时间
    private Date date;

    @JsonGetter("test_getter") // 标注在 get 方法上，表示 json 中的test_getter的值通过此 get 方法来获取
    public String getName() {
        return name;
    }
    @JsonSetter("test_getter") // 标注在 set 方法上，表示 json 反序列化时，将json 中test_getter的值 set 到某个属性中
    public void setName(String name) {
        this.name = name;
    }
}
